﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.IO;
using DevComponents.DotNetBar.Controls;
using BusinessLogicLayer;
using Equin.ApplicationFramework;
using Utilities;

namespace PresentationLayer
{
    public enum LoaiHanhDong
    {
        Them,
        Xoa,
        CapNhat
    }
    public delegate void SetPath(string Path);
    public delegate void CapNhatDSNV(LoaiHanhDong hd, NhanVien nv);
    public delegate void HienThiDSTKNV(List<NhanVien> list);

    public delegate void CapNhatDSHS(LoaiHanhDong hd, HoSoUngVien hs);

    public delegate void CapNhatDA(LoaiHanhDong hd, DuAn da);
    public delegate void HienThiDSDA(int i);
    public delegate void TimDSDA(int i, int thang, int nam, string ten);
    public delegate void CapNhatOnSite(LoaiHanhDong hd, OnSite tl);
    public partial class MainForm : DevComponents.DotNetBar.RibbonForm
    {
        public MainForm()
        {
            InitializeComponent();

            dgvHSUV.CellDoubleClick += dgvHSUV_CellDoubleClick;
            dgvHSUV.ContextMenuStrip = this.cmcQLHS;
            tsmiXemChiTiet.Click += tsmiXemChiTiet_Click;

            dgvNhanSu.ContextMenuStrip = cmsQLNV;
            dgvNhanSu.CellDoubleClick += dgvNhanSu_CellDoubleClick;

            dgvQLDA.CellDoubleClick += dgvQLDA_CellDoubleClick;
            dgvOnSite.CellDoubleClick += dgvOnSite_CellDoubleClick;
        }

        DataGridViewX dgvNhanSu = new DataGridViewX();
        DataGridViewX dgvHSUV = new DataGridViewX();
        DataGridViewX dgvQLDA = new DataGridViewX();
        DataGridViewX dgvNghiPhep = new DataGridViewX();
        DataGridViewX dgvTangCa = new DataGridViewX();
        DataGridViewX dgvOnSite = new DataGridViewX();

        private void ribbonControlQLNS_SelectedRibbonTabChanged(object sender, EventArgs e)
        {
            string tenTab = ribbonControlQLNS.SelectedRibbonTabItem.Name;
            switch (tenTab)
            {
                case "TabQLNhanSu":
                    // Lấy DS PhieuMuon
                    ActionResultAsList<NhanVien> rs = new NhanVienManager().LayDS();
                    if (rs.Success)
                        dgvNhanSu.DataSource = new BindingListView<NhanVien>(rs.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Đưa dgv vào panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvNhanSu);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNhanSu.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabQLHoSo":
                    // Get list all document of candidate
                    ActionResultAsList<HoSoUngVien> rsHSUV = new HoSoUngVienManager().LayDS();
                    if (rsHSUV.Success)
                        dgvHSUV.DataSource = new BindingListView<HoSoUngVien>(rsHSUV.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsHSUV.Exceptions[rsHSUV.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Add data grid view into panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvHSUV);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvHSUV.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabQLDuAn":
                    // Lấy DS Dự án
                    ActionResultAsList<DuAn> dsda = new DuAnManager().LayDSDA();
                    if (dsda.Success)
                        dgvQLDA.DataSource = new BindingListView<DuAn>(dsda.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + dsda.Exceptions[dsda.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Đưa dgv vào panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvQLDA);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabQLNghiPhep":
                    // Lấy DS PhieuMuon
                    ActionResultAsList<NghiPhep> rsNP = new NghiPhepManager().LayDanhSachNghiPhep();
                    if (rsNP.Success)
                        dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(rsNP.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsNP.Exceptions[rsNP.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Đưa dgv vào panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvNghiPhep);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabQLTangCa":
                    // Lấy DS PhieuMuon
                    ActionResultAsList<TangCa> rsTC = new TangCaManager().LayDanhSachTangCa();
                    if (rsTC.Success)
                        dgvTangCa.DataSource = new BindingListView<TangCa>(rsTC.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsTC.Exceptions[rsTC.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Đưa dgv vào panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvTangCa);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvTangCa.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabQLOnSite":
                    ActionResultAsList<OnSite> rsos = new OnSiteManager().LayDSOnSite();
                    if (rsos.Success)
                        dgvOnSite.DataSource = new BindingListView<OnSite>(rsos.ObjectList);
                    else
                        MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsos.Exceptions[rsos.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // Đưa dgv vào panel
                    pnlDSHienThi.Controls.Clear();
                    pnlDSHienThi.Controls.Add(dgvOnSite);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    break;
                case "TabHeThong":
                    pnlDSHienThi.Controls.Clear();
                    progressBarHT.Visible = false;
                    TrangThaiBar.Refresh();
                    lblTongSoDong.Text = "";
                    break;
                default:
                    break;
            }
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            #region Cài đặt dgvHSUV
            // Set all properties for data grid view
            dgvHSUV.AllowUserToAddRows = false;
            dgvHSUV.AllowUserToDeleteRows = false;
            dgvHSUV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvHSUV.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvHSUV.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            dgvHSUV.ColumnHeadersHeight = 24;
            dgvHSUV.Dock = DockStyle.Fill;
            dgvHSUV.MultiSelect = false;
            dgvHSUV.ReadOnly = true;
            dgvHSUV.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvHSUV.AutoGenerateColumns = false;

            // Create necessary columns
            DataGridViewTextBoxColumn colMaUV = new DataGridViewTextBoxColumn();
            colMaUV.HeaderText = "Mã hồ sơ";
            colMaUV.DataPropertyName = "MaHoSo";

            DataGridViewTextBoxColumn colHoUV = new DataGridViewTextBoxColumn();
            colHoUV.HeaderText = "Họ ứng viên";
            colHoUV.DataPropertyName = "HoUngVien";

            DataGridViewTextBoxColumn colTenUV = new DataGridViewTextBoxColumn();
            colTenUV.HeaderText = "Tên ứng viên";
            colTenUV.DataPropertyName = "TenUngVien";

            DataGridViewTextBoxColumn colNgaySinhUV = new DataGridViewTextBoxColumn();
            colNgaySinhUV.HeaderText = "Ngày sinh";
            colNgaySinhUV.DataPropertyName = "NgaySinh";
            colNgaySinhUV.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colGTUV = new DataGridViewTextBoxColumn();
            colGTUV.HeaderText = "Giới tính";
            colGTUV.DataPropertyName = "TenGioiTinh";

            DataGridViewTextBoxColumn colNVPVUV = new DataGridViewTextBoxColumn();
            colNVPVUV.HeaderText = "NV phỏng vấn";
            colNVPVUV.DataPropertyName = "HoTenPV";

            DataGridViewTextBoxColumn colTTHV = new DataGridViewTextBoxColumn();
            colTTHV.HeaderText = "Trạng thái";
            colTTHV.DataPropertyName = "TrangThai";

            DataGridViewTextBoxColumn colTDHV = new DataGridViewTextBoxColumn();
            colTDHV.HeaderText = "Trình độ học vấn";
            colTDHV.DataPropertyName = "TrinhDoHocVan";

            DataGridViewTextBoxColumn colNgNopHS = new DataGridViewTextBoxColumn();
            colNgNopHS.HeaderText = "Ngày nộp";
            colNgNopHS.DataPropertyName = "NgayNop";
            colNgNopHS.DefaultCellStyle.Format = "dd/MM/yyyy";

            if (dgvHSUV.Columns.Count == 0)
                dgvHSUV.Columns.AddRange(new DataGridViewColumn[] { colMaUV, colHoUV, colTenUV, colGTUV, colNgaySinhUV, colTDHV, colNgNopHS, colNVPVUV, colTTHV });
            #endregion
            #region Cài đặt dgvNhanSu
            // Cài đặt các thuộc tính cần thiết
            dgvNhanSu.AllowUserToAddRows = false;
            dgvNhanSu.AllowUserToDeleteRows = false;
            dgvNhanSu.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvNhanSu.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            dgvNhanSu.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvNhanSu.Dock = DockStyle.Fill;
            dgvNhanSu.MultiSelect = false;
            dgvNhanSu.ReadOnly = true;
            dgvNhanSu.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvNhanSu.AutoGenerateColumns = false;

            // Tạo các cột cần thiết
            DataGridViewTextBoxColumn colMaNV = new DataGridViewTextBoxColumn();
            colMaNV.HeaderText = "Mã nhân viên";
            colMaNV.DataPropertyName = "MaNhanVien";
            colMaNV.Name = "MaNhanVien";

            DataGridViewTextBoxColumn colHoNV = new DataGridViewTextBoxColumn();
            colHoNV.HeaderText = "Họ";
            colHoNV.DataPropertyName = "HoNhanVien";
            colHoNV.Name = "HoNhanVien";

            DataGridViewTextBoxColumn colTenNV = new DataGridViewTextBoxColumn();
            colTenNV.HeaderText = "Tên";
            colTenNV.DataPropertyName = "TenNhanVien";
            colTenNV.Name = "TenNhanVien";

            DataGridViewTextBoxColumn colGioiTinhNV = new DataGridViewTextBoxColumn();
            colGioiTinhNV.HeaderText = "Giới tính";
            colGioiTinhNV.DataPropertyName = "TenGioiTinh";
            colGioiTinhNV.Name = "GioiTinh";

            DataGridViewTextBoxColumn colNgaySinhNV = new DataGridViewTextBoxColumn();
            colNgaySinhNV.HeaderText = "Ngày sinh";
            colNgaySinhNV.DataPropertyName = "NgaySinh";
            colNgaySinhNV.Name = "NgaySinh";
            colNgaySinhNV.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colEmailNV = new DataGridViewTextBoxColumn();
            colEmailNV.HeaderText = "Email";
            colEmailNV.DataPropertyName = "Email";
            colEmailNV.Name = "Email";

            DataGridViewTextBoxColumn colSoDTNV = new DataGridViewTextBoxColumn();
            colSoDTNV.HeaderText = "Số điện thoại";
            colSoDTNV.DataPropertyName = "SoDienThoai";
            colSoDTNV.Name = "SoDienThoai";

            DataGridViewTextBoxColumn colTenCVNV = new DataGridViewTextBoxColumn();
            colTenCVNV.HeaderText = "Chức vụ";
            colTenCVNV.DataPropertyName = "TenChucVu";
            colTenCVNV.Name = "TenChucVu";

            DataGridViewTextBoxColumn colChuKyHD = new DataGridViewTextBoxColumn();
            colChuKyHD.HeaderText = "Chu kỳ HĐ";
            colChuKyHD.DataPropertyName = "ChuKyHopDong";
            colChuKyHD.Name = "ChuKyHopDong";
            colChuKyHD.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            DataGridViewTextBoxColumn colNgayNhan = new DataGridViewTextBoxColumn();
            colNgayNhan.HeaderText = "Ngày nhận";
            colNgayNhan.DataPropertyName = "NgayNhan";
            colNgayNhan.Name = "NgayNhan";
            colNgayNhan.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colNgayBDLam = new DataGridViewTextBoxColumn();
            colNgayBDLam.HeaderText = "Ngày bắt đầu làm";
            colNgayBDLam.DataPropertyName = "NgayBDLam";
            colNgayBDLam.Name = "NgayBDLam";
            colNgayBDLam.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colNgayKyLaiHD = new DataGridViewTextBoxColumn();
            colNgayKyLaiHD.HeaderText = "Ngày ký lại HĐ";
            colNgayKyLaiHD.DataPropertyName = "NgayKyLaiHD";
            colNgayKyLaiHD.Name = "NgayKyLaiHD";
            colNgayKyLaiHD.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colNVQL = new DataGridViewTextBoxColumn();
            colNVQL.HeaderText = "Nhân viên quản lý";
            colNVQL.DataPropertyName = "TenNVQL";
            colNVQL.Name = "TenNVQL";

            DataGridViewTextBoxColumn colTrangThai = new DataGridViewTextBoxColumn();
            colTrangThai.HeaderText = "Trạng thái";
            colTrangThai.DataPropertyName = "TrangThai";
            colTrangThai.Name = "TrangThai";

            if (dgvNhanSu.Columns.Count == 0)
                dgvNhanSu.Columns.AddRange(new DataGridViewColumn[] { colMaNV, colHoNV, colTenNV, colGioiTinhNV, colNgaySinhNV, colEmailNV, colSoDTNV, 
                                                    colTenCVNV, colChuKyHD, colNgayNhan, colNgayBDLam, colNgayKyLaiHD, colNVQL, colTrangThai });
            #endregion
            #region Cài đặt dgvQLDA
            // Cài đặt các thuộc tính cần thiết
            dgvQLDA.AllowUserToAddRows = false;
            dgvQLDA.AllowUserToDeleteRows = false;
            dgvQLDA.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvQLDA.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            dgvQLDA.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvQLDA.Dock = DockStyle.Fill;
            dgvQLDA.MultiSelect = false;
            dgvQLDA.ReadOnly = true;
            dgvQLDA.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvQLDA.AutoGenerateColumns = false;
            dgvQLDA.ContextMenuStrip = cmsDuAn;

            // Tạo các cột cần thiết
            DataGridViewTextBoxColumn colMaDuAn = new DataGridViewTextBoxColumn();
            colMaDuAn.HeaderText = "Mã dự án";
            colMaDuAn.DataPropertyName = "MaDuAn";
            colMaDuAn.Name = "MaDuAn";

            DataGridViewTextBoxColumn colTenDuAn = new DataGridViewTextBoxColumn();
            colTenDuAn.HeaderText = "Tên dự án";
            colTenDuAn.DataPropertyName = "TenDuAn";
            colTenDuAn.Name = "TenDuAn";

            DataGridViewTextBoxColumn colNgayBD = new DataGridViewTextBoxColumn();
            colNgayBD.HeaderText = "Ngày bắt đầu";
            colNgayBD.DataPropertyName = "NgayBD";
            colNgayBD.Name = "NgayBD";
            colNgayBD.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colNgayKT = new DataGridViewTextBoxColumn();
            colNgayKT.HeaderText = "Ngày kết thúc";
            colNgayKT.DataPropertyName = "NgayKT";
            colNgayKT.Name = "NgayKT";
            colNgayKT.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colMoTa = new DataGridViewTextBoxColumn();
            colMoTa.HeaderText = "Mô tả";
            colMoTa.DataPropertyName = "MoTa";
            colMoTa.Name = "MoTa";

            if (dgvQLDA.Columns.Count == 0)
                dgvQLDA.Columns.AddRange(new DataGridViewColumn[] { colMaDuAn, colTenDuAn, colNgayBD, colNgayKT, colMoTa });
            #endregion
            #region Cài đặt dgvOnSite
            dgvOnSite.AllowUserToAddRows = false;
            dgvOnSite.AllowUserToDeleteRows = false;
            dgvOnSite.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvOnSite.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvOnSite.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dgvOnSite.Dock = DockStyle.Fill;
            dgvOnSite.MultiSelect = false;
            dgvOnSite.ReadOnly = true;
            dgvOnSite.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvOnSite.AutoGenerateColumns = false;
            dgvOnSite.ContextMenuStrip = cmsQLOS;
            DataGridViewTextBoxColumn colMaOnSite = new DataGridViewTextBoxColumn();
            colMaOnSite.HeaderText = "Mã On-Site";
            colMaOnSite.DataPropertyName = "MaOnSite";
            colMaOnSite.Name = "MaOnSite";
            DataGridViewTextBoxColumn colCongTy = new DataGridViewTextBoxColumn();
            colCongTy.HeaderText = "Công ty";
            colCongTy.DataPropertyName = "CongTy";
            colCongTy.Name = "CongTy";
            DataGridViewTextBoxColumn colDiaDiem = new DataGridViewTextBoxColumn();
            colDiaDiem.HeaderText = "Địa điểm";
            colDiaDiem.DataPropertyName = "DiaDiem";
            colDiaDiem.Name = "DiaDiem";
            DataGridViewTextBoxColumn colNgayBDOS = new DataGridViewTextBoxColumn();
            colNgayBDOS.HeaderText = "Ngày bắt đầu";
            colNgayBDOS.DataPropertyName = "NgayBD";
            colNgayBDOS.Name = "NgayBD";
            colNgayBDOS.DefaultCellStyle.Format = "dd/MM/yyyy";

            DataGridViewTextBoxColumn colNgayKTOS = new DataGridViewTextBoxColumn();
            colNgayKTOS.HeaderText = "Ngày kết thúc";
            colNgayKTOS.DataPropertyName = "NgayKT";
            colNgayKTOS.Name = "NgayKT";
            colNgayKTOS.DefaultCellStyle.Format = "dd/MM/yyyy";
            if (dgvOnSite.Columns.Count == 0)
                dgvOnSite.Columns.AddRange(new DataGridViewColumn[] { colMaOnSite, colCongTy, colDiaDiem, colNgayBDOS, colNgayKTOS });
            #endregion
            TaoDGVNghiPhep();
            TaoDGVTangCa();
        }

        #region Nghiêm Xuân Huy's code

        private void btnThoat_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnThemNhanSu_Click(object sender, EventArgs e)
        {
            frmCapNhatTTNV f = new frmCapNhatTTNV();
            f.CapNhatDS = new CapNhatDSNV(this.CapNhatDSNV);
            f.ShowDialog();
        }

        private void CapNhatDSNV(LoaiHanhDong hd, NhanVien nv)
        {
            List<NhanVien> list = (dgvNhanSu.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(nv);
                    dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNhanSu.RowCount;
                    break;
                case LoaiHanhDong.Xoa:
                    int index = list.FindIndex(n => n.MaNhanVien == nv.MaNhanVien);
                    list.RemoveAt(index);
                    dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNhanSu.RowCount;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index1 = list.FindIndex(n => n.MaNhanVien == nv.MaNhanVien);
                    list[index1] = nv;
                    dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);
                    break;
                default:
                    break;
            }
        }

        private void btnCapNhatNhanSu_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                List<NhanVien> list = (dgvNhanSu.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                NhanVien nv = list.Find(n => n.MaNhanVien == maNV);
                frmCapNhatTTNV f = new frmCapNhatTTNV();
                f.nv = nv;
                f.CapNhatDS = new CapNhatDSNV(this.CapNhatDSNV);
                f.ShowDialog();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn sửa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnHuyNhanSu_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                List<NhanVien> list = (dgvNhanSu.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                ActionResultAsList<NhanVien> ar = new NhanVienManager().LayTTCTTheoMa(maNV);
                NhanVien nv;
                if (ar.Success)
                {
                    nv = ar.ObjectList[0];
                    string format = "Bạn có chắc chắn muốn xóa nhân viên có mã {0}\nvà các thông tin liên quan?\n\n" +
                                    "Chi tiết:\n" +
                                    "- Số nhân viên đang quản lý: {1}\n" +
                                    "- Số dự án đã đăng ký: {2}\n" +
                                    "- Số đợt On-Site đã đăng ký: {3}\n" +
                                    "- Số lần nghỉ phép: {4}\n" +
                                    "- Số lần đăng ký tăng ca: {5}";
                    string msg = String.Format(format, nv.MaNhanVien, nv.NhanVien1.Count, nv.DuAns.Count, nv.OnSites.Count, nv.NghiPheps.Count, nv.DKTangCas.Count);
                    DialogResult rs = MessageBox.Show(msg, "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    if (rs == DialogResult.Yes)
                    {
                        ActionResult ac = new NhanVienManager().Xoa(maNV);
                        if (ac.Success)
                        {
                            MessageBox.Show("Xóa nhân viên thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            foreach (var n in list)
                            {
                                if (n.NhanVienQuanLy == maNV)
                                {
                                    n.NhanVienQuanLy = null;
                                    n.NhanVien2 = null;
                                }
                            }
                            dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);

                            CapNhatDSNV(LoaiHanhDong.Xoa, nv);
                        }
                        else
                            MessageBox.Show(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                    MessageBox.Show(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn xóa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void tsmiThemNV_Click(object sender, EventArgs e)
        {
            btnThemNhanSu_Click(btnThemNhanSu, new EventArgs());
        }

        private void tsmiCapNhatNV_Click(object sender, EventArgs e)
        {
            btnCapNhatNhanSu_Click(btnCapNhatNhanSu, new EventArgs());
        }

        private void tsmiXoaNV_Click(object sender, EventArgs e)
        {
            btnHuyNhanSu_Click(btnHuyNhanSu, new EventArgs());
        }

        private void btnSaThaiNhanSu_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                List<NhanVien> list = (dgvNhanSu.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                NhanVien nv = list.Find(n => n.MaNhanVien == maNV);
                if (nv.ChucVu == "SVTT")
                    MessageBox.Show("Không thể sa thải sinh viên thực tập!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                {
                    DialogResult rs = MessageBox.Show("Bạn muốn sa thải nhân viên có mã " + maNV + "?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (rs == DialogResult.Yes)
                    {
                        ActionResult ac = new NhanVienManager().SaThai(maNV);
                        if (ac.Success)
                        {
                            MessageBox.Show("Sa thải nhân viên thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            foreach (var n in list)
                            {
                                if (n.NhanVienQuanLy == maNV)
                                {
                                    n.NhanVienQuanLy = null;
                                    n.NhanVien2 = null;
                                }
                            }
                            dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);

                            nv.TrangThai = TrangThaiNV.NghiViec;
                            CapNhatDSNV(LoaiHanhDong.CapNhat, nv);
                        }
                        else
                            MessageBox.Show(ac.Exceptions[ac.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn sa thải!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnKyHopDong_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                List<NhanVien> list = (dgvNhanSu.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                NhanVien nv = list.Find(n => n.MaNhanVien == maNV);
                if (nv.ChucVu == "SVTT")
                    MessageBox.Show("Không thể ký hợp đồng với sinh viên thực tập!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                    if (nv.NgayKyLaiHD.Value.CompareTo(DateTime.Today) == 1)
                        MessageBox.Show("Hợp đồng hiện tại chưa hết hạn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                    {
                        frmKyHD f = new frmKyHD();
                        f.nhanVien = nv;
                        f.capNhatDS = new CapNhatDSNV(this.CapNhatDSNV);
                        f.ShowDialog();
                    }
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn ký hợp đồng!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnXemTTNhanSu_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                ActionResultAsList<NhanVien> ar = new NhanVienManager().LayTTCTTheoMa(maNV);
                if (ar.Success)
                {
                    frmChiTietNV f = new frmChiTietNV();
                    f.NhanVien = ar.ObjectList[0];
                    f.ShowDialog();
                }
                else
                    MessageBox.Show(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn xem chi tiết!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void HienThiDSTKNV(List<NhanVien> list)
        {
            dgvNhanSu.DataSource = new BindingListView<NhanVien>(list);
            lblTongSoDong.Text = "Tổng số dòng: " + dgvNhanSu.RowCount;
        }

        private void btnTimNhanSu_Click(object sender, EventArgs e)
        {
            frmTimKiemNV f = new frmTimKiemNV();
            f.HienThiDS = new HienThiDSTKNV(this.HienThiDSTKNV);
            f.ShowDialog();
        }

        void dgvNhanSu_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            btnXemTTNhanSu_Click(btnXemTTNhanSu, new EventArgs());
        }

        private void tsmiSaThai_Click(object sender, EventArgs e)
        {
            btnSaThaiNhanSu_Click(btnSaThaiNhanSu, new EventArgs());
        }

        private void tsmiXemCT_Click(object sender, EventArgs e)
        {
            btnXemTTNhanSu_Click(btnXemTTNhanSu, new EventArgs());
        }

        private void tsmiTimKiem_Click(object sender, EventArgs e)
        {
            btnTimNhanSu_Click(btnTimNhanSu, new EventArgs());
        }

        private void tsmiKyHD_Click(object sender, EventArgs e)
        {
            btnKyHopDong_Click(btnKyHopDong, new EventArgs());
        }

        private void btnTaiDSNhanSu_Click(object sender, EventArgs e)
        {
            frmLoadNV f = new frmLoadNV();
            f.HienThiDS = new HienThiDSTKNV(this.HienThiDSTKNV);
            f.ShowDialog();
        }

        private void btnInHDCV_Click(object sender, EventArgs e)
        {
            if (dgvNhanSu.SelectedRows.Count > 0)
            {
                string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
                ActionResultAsList<NhanVien> ar = new NhanVienManager().LayTTDeInTheoMa(maNV);
                if (ar.Success)
                {
                    if (radInHopDong.Checked)
                    {
                        frmInHD f = new frmInHD();
                        f.NhanVien = ar.ObjectList[0];
                        f.ShowDialog();
                    }
                    else
                    {
                        frmInCV_NV f = new frmInCV_NV();
                        f.NhanVien = ar.ObjectList[0];
                        f.ShowDialog();
                    }
                }
                else
                    MessageBox.Show(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Bạn phải chọn nhân viên muốn in!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void inCVToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
            ActionResultAsList<NhanVien> ar = new NhanVienManager().LayTTDeInTheoMa(maNV);
            if (ar.Success)
            {
                frmInCV_NV f = new frmInCV_NV();
                f.NhanVien = ar.ObjectList[0];
                f.ShowDialog();
            }
            else
                MessageBox.Show(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void inHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string maNV = dgvNhanSu.SelectedRows[0].Cells["MaNhanVien"].Value.ToString();
            ActionResultAsList<NhanVien> ar = new NhanVienManager().LayTTDeInTheoMa(maNV);
            if (ar.Success)
            {
                frmInHD f = new frmInHD();
                f.NhanVien = ar.ObjectList[0];
                f.ShowDialog();
            }
            else
                MessageBox.Show(ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        #endregion

        #region Nguyễn Minh Tuấn's code
        void tsmiXemChiTiet_Click(object sender, EventArgs e)
        {
            this.dgvHSUV_CellDoubleClick(dgvHSUV, new DataGridViewCellEventArgs(0, 0));
        }
        private void btnTaiHoSo_Click(object sender, EventArgs e)
        {
            ActionResultAsList<HoSoUngVien> ar;
            LoadDSHoSoForm loadHS = new LoadDSHoSoForm();
            DialogResult dlg = loadHS.ShowDialog();
            if (dlg == DialogResult.OK)
            {
                if (loadHS.TypeLoad == 1)
                    ar = new HoSoUngVienManager().LayDS();
                else
                    ar = new HoSoUngVienManager().LayDSCho();
                if (ar.Success)
                {
                    this.dgvHSUV.DataSource = new BindingListView<HoSoUngVien>(ar.ObjectList);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvHSUV.RowCount;
                }
                else MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + ar.Exceptions[ar.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LoadListSearch(List<HoSoUngVien> list)
        {
            if (list.Count > 0)
            {
                dgvHSUV.DataSource = new BindingListView<HoSoUngVien>(list);
                lblTongSoDong.Text = "Tổng số dòng: " + dgvHSUV.RowCount;
            }
            else MessageBox.Show("Không tìm thấy dữ liệu!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnTimHoSo_Click(object sender, EventArgs e)
        {
            TimKiemHoSoForm tkform = new TimKiemHoSoForm();
            tkform.MySearchList = this.LoadListSearch;
            tkform.Show();
        }

        void dgvHSUV_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvHSUV.SelectedRows.Count > 0)
            {
                int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                var list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
                var hoSo = list[list.FindIndex(h => h.MaHoSo == ma)];
                ChiTietHoSoForm chitietForm = new ChiTietHoSoForm();
                chitietForm.HoSoUV = hoSo;
                chitietForm.Show();
            }
        }

        private void CapNhatDSHoSo(LoaiHanhDong hd, HoSoUngVien hs)
        {
            List<HoSoUngVien> list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(hs);
                    break;
                case LoaiHanhDong.Xoa:
                    int maHS = int.Parse(dgvHSUV.SelectedRows[0].Cells[0].Value.ToString());
                    int index = list.FindIndex(h => h.MaHoSo == maHS);
                    list.RemoveAt(index);
                    break;
                case LoaiHanhDong.CapNhat:
                    list[list.FindIndex(h => h.MaHoSo == hs.MaHoSo)] = hs;
                    break;
            }
            dgvHSUV.DataSource = new BindingListView<HoSoUngVien>(list);
            lblTongSoDong.Text = "Tổng số dòng: " + dgvHSUV.RowCount;
        }

        private void btnThemHoSo_Click(object sender, EventArgs e)
        {
            CapNhatHoSoForm capNhatHoSoForm = new CapNhatHoSoForm();
            capNhatHoSoForm.CapNhatDS = this.CapNhatDSHoSo;
            capNhatHoSoForm.HoSo = new HoSoUngVien();
            capNhatHoSoForm.ShowDialog();
        }

        private void btnCapNhatHoSo_Click(object sender, EventArgs e)
        {
            if (dgvHSUV.SelectedRows.Count > 0)
            {
                CapNhatHoSoForm capNhatHoSoForm = new CapNhatHoSoForm();
                int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                var list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
                var hoSo = list[list.FindIndex(h => h.MaHoSo == ma)];
                capNhatHoSoForm.HoSo = hoSo;
                capNhatHoSoForm.CapNhatDS = this.CapNhatDSHoSo;
                capNhatHoSoForm.ShowDialog();
            }
            else MessageBox.Show("Bạn chưa chọn dòng hồ sơ muốn sửa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnXoaHoSo_Click(object sender, EventArgs e)
        {
            if (this.dgvHSUV.SelectedRows.Count > 0)
            {
                DialogResult dlg = MessageBox.Show("Bạn có muốn xóa hồ sơ có mã là: " + dgvHSUV.CurrentRow.Cells[0].Value.ToString() + " không?", "Xác nhận", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                if (dlg == DialogResult.OK)
                {
                    int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                    var ar = new DuAnQKManager().XoaBenHoSo(ma);
                    if (ar.Success)
                    {
                        var ar1 = new HoSoUngVienManager().Xoa(ma);
                        if (ar1.Success)
                        {
                            CapNhatDSHoSo(LoaiHanhDong.Xoa, null);
                            MessageBox.Show("Xóa thành công!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + ar1.Exceptions[ar1.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + ar.Exceptions[ar.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else MessageBox.Show("Bạn chưa chọn dòng hồ sơ muốn xóa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnGuiMail_Click(object sender, EventArgs e)
        {
            GuiMailForm gmf = new GuiMailForm();
            gmf.ShowDialog();
        }

        private void btnChapNhanHoSo_Click(object sender, EventArgs e)
        {
            if (dgvHSUV.SelectedRows.Count > 0)
            {
                frmCapNhatTTNV f = new frmCapNhatTTNV();
                int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                var list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
                var hoSo = list[list.FindIndex(h => h.MaHoSo == ma)];
                f.hs = hoSo;
                f.FormClosing += f_FormClosing;
                f.ShowDialog();
            }
            else MessageBox.Show("Bạn chưa chọn dòng hồ sơ muốn chấp nhận!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        void f_FormClosing(object sender, FormClosingEventArgs e)
        {
            if ((sender as frmCapNhatTTNV).ThanhCong)
            {
                int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                var list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
                var hoSo = list[list.FindIndex(h => h.MaHoSo == ma)];
                hoSo.TrangThai = TrangThaiHoSo.NHAN_LV;
                CapNhatDSHoSo(LoaiHanhDong.CapNhat, hoSo);
            }
        }

        string pathFile = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        private void btnInHoSo_Click(object sender, EventArgs e)
        {
            if (this.dgvHSUV.SelectedRows.Count > 0)
            {
                int ma = int.Parse(dgvHSUV.CurrentRow.Cells[0].Value.ToString());
                var list = (dgvHSUV.DataSource as BindingListView<HoSoUngVien>).DataSource as List<HoSoUngVien>;
                var hoSo = list[list.FindIndex(h => h.MaHoSo == ma)];
                List<HoSoUngVien> listHoSo = new List<HoSoUngVien>();
                listHoSo.Add(hoSo);
                InHoSoForm f = new InHoSoForm();
                f.HoSo = listHoSo;
                f.SetPathFile = this.SetPathFile;
                f.ShowDialog();
                var ar = new HoSoUngVienManager().LayDS();
                this.dgvHSUV.DataSource = new BindingListView<HoSoUngVien>(ar.ObjectList);
            }
            else MessageBox.Show("Bạn chưa chọn dòng hồ sơ muốn in!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        private void SetPathFile(string path)
        {
            this.pathFile = path;
        }
        #endregion

        #region Tống Phước Anh Duy's code

        private void CapNhatDSDA(LoaiHanhDong hd, DuAn da)
        {
            List<DuAn> list = new List<DuAn>();
            if ((dgvQLDA.DataSource as BindingListView<DuAn>) != null)
            {
                list = (dgvQLDA.DataSource as BindingListView<DuAn>).DataSource as List<DuAn>;
            }
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(da);
                    dgvQLDA.DataSource = new BindingListView<DuAn>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                    break;
                case LoaiHanhDong.Xoa:
                    dgvQLDA.Rows.Remove(dgvQLDA.SelectedRows[0]);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index = list.FindIndex(s => s.MaDuAn == da.MaDuAn);
                    list[index] = da;
                    dgvQLDA.DataSource = new BindingListView<DuAn>(list);
                    break;
                default:
                    break;
            }
        }

        private void btnThemDA_Click(object sender, EventArgs e)
        {
            FormCapNhatDuAn f = new FormCapNhatDuAn();
            f.maDA = "";
            f.PhuongThucCapNhatDA = new CapNhatDA(CapNhatDSDA);
            f.ShowDialog();
        }

        private void btnCapNhatDA_Click(object sender, EventArgs e)
        {
            List<DuAn> l = (dgvQLDA.DataSource as BindingListView<DuAn>).DataSource as List<DuAn>;
            if (l.Count != 0)
            {
                FormCapNhatDuAn f = new FormCapNhatDuAn();
                f.maDA = Convert.ToString(dgvQLDA.SelectedRows[0].Cells["MaDuAn"].Value);
                f.da = l.Find(s => s.MaDuAn == f.maDA);
                f.PhuongThucCapNhatDA = new CapNhatDA(CapNhatDSDA);
                f.ShowDialog();
            }
            else
                MessageBox.Show("Không có dự án nào trong danh sách!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnHuyDA_Click(object sender, EventArgs e)
        {
            if (dgvQLDA.SelectedRows.Count != 0)
            {
                string maDA = Convert.ToString(dgvQLDA.SelectedRows[0].Cells["MaDuAn"].Value);
                ActionResultAsList<NhanVien> ars = new DuAnManager().LayDSNVTrongDA(maDA);
                int i = ars.ObjectList.Count;
                if (MessageBox.Show(String.Format("Bạn muốn hủy dự án có mã dự án {0}?\nTrong dự án có {1} nhân viên.", maDA, i), "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    List<DuAn> l = (dgvQLDA.DataSource as BindingListView<DuAn>).DataSource as List<DuAn>;
                    DuAn da = l.Find(s => s.MaDuAn == maDA);
                    ActionResult rs = new DuAnManager().XoaDA(da.MaDuAn);
                    if (rs.Success)
                    {
                        CapNhatDSDA(LoaiHanhDong.Xoa, da);
                        MessageBox.Show("Hủy dự án thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                        MessageBox.Show("Hủy dự án thất bại!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show("Không có dự án nào trong danh sách!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnXemCTDA_Click(object sender, EventArgs e)
        {
            List<DuAn> l = (dgvQLDA.DataSource as BindingListView<DuAn>).DataSource as List<DuAn>;
            if (l.Count != 0)
            {
                FormChiTietDA f = new FormChiTietDA();
                f.maDA = Convert.ToString(dgvQLDA.SelectedRows[0].Cells["MaDuAn"].Value);
                f.da = l.Find(s => s.MaDuAn == f.maDA);
                f.PhuongThucCapNhatDA = new CapNhatDA(CapNhatDSDA);
                f.ShowDialog();
            }
            else
                MessageBox.Show("Không có dự án nào trong danh sách!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnTimDA_Click(object sender, EventArgs e)
        {
            FormTimKiemDA f = new FormTimKiemDA();
            f.TimDS = new TimDSDA(TimDSDATen);
            f.ShowDialog();
        }

        private void btnTaiDSDA_Click(object sender, EventArgs e)
        {
            FormTaiDA f = new FormTaiDA();
            f.LoadDS = new HienThiDSDA(TaiDSDA);
            f.ShowDialog();
        }

        private void TaiDSDA(int i)
        {
            if (i == 1)
            {
                ActionResultAsList<DuAn> dsda = new DuAnManager().LayDSDA();
                if (dsda.ObjectList.Count == 0)
                {
                    MessageBox.Show("Không có dự án trong danh sách!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (dsda.Success)
                {
                    dgvQLDA.DataSource = new BindingListView<DuAn>(dsda.ObjectList);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + dsda.Exceptions[dsda.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                ActionResultAsList<DuAn> dsda = new DuAnManager().TKDAChuaHetHan();
                if (dsda.ObjectList.Count == 0)
                {
                    MessageBox.Show("Không có dự án nào chưa hết hạn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (dsda.Success)
                {
                    dgvQLDA.DataSource = new BindingListView<DuAn>(dsda.ObjectList);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + dsda.Exceptions[dsda.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void TimDSDATen(int i, int thang, int nam, string ten)
        {
            if (i == 1)
            {
                ActionResultAsList<DuAn> dsda = new DuAnManager().TKDATheoThang(thang, nam);
                if (dsda.Success)
                    if (dsda.ObjectList.Count == 0)
                    {
                        MessageBox.Show(string.Format("Không có dự án trong tháng {0} năm {1}!", thang, nam), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        dgvQLDA.DataSource = new BindingListView<DuAn>(dsda.ObjectList);
                        lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                    }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + dsda.Exceptions[dsda.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                ActionResultAsList<DuAn> dsda = new DuAnManager().TKDATheoTen(ten);
                if (dsda.Success)
                    if (dsda.ObjectList.Count == 0)
                    {
                        MessageBox.Show(string.Format("Không có dự án có tên {0}!", ten), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        dgvQLDA.DataSource = new BindingListView<DuAn>(dsda.ObjectList);
                        lblTongSoDong.Text = "Tổng số dòng: " + dgvQLDA.RowCount;
                    }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + dsda.Exceptions[dsda.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tsmiThemDA_Click(object sender, EventArgs e)
        {
            btnThemDA_Click(btnThemDA, new EventArgs());
        }

        private void tsmiCapNhatDA_Click(object sender, EventArgs e)
        {
            btnCapNhatDA_Click(btnCapNhatDA, new EventArgs());
        }

        private void tsmiHuyDA_Click(object sender, EventArgs e)
        {
            btnHuyDA_Click(btnHuyDA, new EventArgs());
        }

        private void tsmiChiTietDA_Click(object sender, EventArgs e)
        {
            btnXemCTDA_Click(btnXemCTDA, new EventArgs());
        }

        private void tsmiTKDA_Click(object sender, EventArgs e)
        {
            btnTimDA_Click(btnTimDA, new EventArgs());
        }

        void dgvQLDA_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            btnXemCTDA_Click(btnXemCTDA, new EventArgs());
        }

        #endregion

        #region Trần Công Huy's code
        private void CapNhatDSOnSite(LoaiHanhDong hd, OnSite os)
        {
            List<OnSite> list = (dgvOnSite.DataSource as BindingListView<OnSite>).DataSource as List<OnSite>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(os);
                    dgvOnSite.DataSource = new BindingListView<OnSite>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
                    break;
                case LoaiHanhDong.Xoa:
                    dgvOnSite.Rows.Remove(dgvOnSite.SelectedRows[0]);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index = list.FindIndex(s => s.MaOnSite == os.MaOnSite);
                    list[index] = os;
                    dgvOnSite.DataSource = new BindingListView<OnSite>(list);
                    break;
                default:
                    break;
            }
        }
        private void btnThemOS_Click(object sender, EventArgs e)
        {
            FormCapNhatThongTinOnSite fos = new FormCapNhatThongTinOnSite();
            fos.PhuongThucCapNhatOS = new CapNhatOnSite(CapNhatDSOnSite);
            fos.OnSite = new OnSite();
            fos.ShowDialog();
        }
        private void btnCapNhatOS_Click(object sender, EventArgs e)
        {
            if (dgvOnSite.SelectedRows.Count > 0)
            {
                FormCapNhatThongTinOnSite fos = new FormCapNhatThongTinOnSite();
                fos.PhuongThucCapNhatOS = new CapNhatOnSite(CapNhatDSOnSite);
                var list = (dgvOnSite.DataSource as BindingListView<OnSite>).DataSource as List<OnSite>;
                fos.OnSite = list[dgvOnSite.CurrentRow.Index];
                fos.Maos = Convert.ToString(dgvOnSite.SelectedRows[0].Cells["MaOnSite"].Value);
                fos.PhuongThucCapNhatOS = new CapNhatOnSite(CapNhatDSOnSite);
                fos.ShowDialog();
            }
            else
                MessageBox.Show("Bạn chưa chọn dòng On-Site muốn sửa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        private void btnHuyOS_Click(object sender, EventArgs e)
        {
            if (dgvOnSite.SelectedRows.Count > 0)
            {
                string maonsite = dgvOnSite.SelectedRows[0].Cells[0].Value.ToString();
                OnSiteManager osmanager = new OnSiteManager();
                ActionResultAsList<NhanVien> listnhanvien = osmanager.LayDSNhanVienTheoMaOnSite(maonsite);
                DialogResult dlg = MessageBox.Show("Bạn có muốn xóa On-Site không?\n\nChi tiết:\n- Số nhân viên đăng ký: " + listnhanvien.ObjectList.Count, "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dlg == DialogResult.Yes)
                {
                    FormCapNhatThongTinOnSite fr = new FormCapNhatThongTinOnSite();
                    List<NhanVien> l = listnhanvien.ObjectList;
                    var re = osmanager.XoaOnSite(maonsite, l);
                    if (re.Success)
                    {

                        var list = (dgvOnSite.DataSource as BindingListView<OnSite>).DataSource as List<OnSite>;
                        CapNhatDSOnSite(LoaiHanhDong.Xoa, new OnSite());
                        osmanager.DoiTTNVKhiXoa(l);
                        MessageBox.Show("Xóa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }
                    else MessageBox.Show(re.Exceptions[re.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
            else
                MessageBox.Show("Bạn chưa chọn On-Site muốn xóa!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        private void btnTaiDSOS_Click(object sender, EventArgs e)
        {
            ActionResultAsList<OnSite> ar = new ActionResultAsList<OnSite>();
            FormTaiDSOnSite formload = new FormTaiDSOnSite();
            DialogResult dlg = formload.ShowDialog();
            if (dlg == DialogResult.OK)
            {
                int type = formload.TypeLoad;
                if (type == 1)
                    ar = new OnSiteManager().LayDSOnSite();
                else
                    if (type == 2)
                        ar = new OnSiteManager().LayDSOnSiteHienHanh();
                if (ar.Success)
                {
                    dgvOnSite.DataSource = new BindingListView<OnSite>(ar.ObjectList);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
                }
                else MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + ar.Exceptions[ar.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void TaiDSOnSite(List<OnSite> list)
        {
            if (list.Count > 0)
            {
                dgvOnSite.DataSource = new BindingListView<OnSite>(list);
                lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
            }
            else MessageBox.Show("Không tìm thấy dữ liệu!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        private void TaiLaiDSOS(List<OnSite> list)
        {
            if (list.Count > 0)
            {
                dgvOnSite.DataSource = new BindingListView<OnSite>(list);
                lblTongSoDong.Text = "Tổng số dòng: " + dgvOnSite.RowCount;
            }
            else MessageBox.Show("Không tìm thấy dữ liệu!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        private void btnTimOS_Click(object sender, EventArgs e)
        {

            FormTimKiemOnSite form = new FormTimKiemOnSite();

            form.TaiDSOS = this.TaiLaiDSOS;

            form.ShowDialog();
        }
        private void btnXemCTOS_Click(object sender, EventArgs e)
        {
            if (dgvOnSite.SelectedRows.Count > 0)
            {
                FormChiTietOnSite fos = new FormChiTietOnSite();
                string maos = Convert.ToString(dgvOnSite.SelectedRows[0].Cells["MaOnSite"].Value);
                List<OnSite> l = (dgvOnSite.DataSource as BindingListView<OnSite>).DataSource as List<OnSite>;
                OnSite os = l.Find(p => p.MaOnSite == maos);

                fos.onsite = os;
                fos.ShowDialog();
            }
            else
                MessageBox.Show("Bạn chưa chọn dòng On-Site muốn xem!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        void dgvOnSite_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            this.btnXemCTOS_Click(btnXemCTOS, new EventArgs());
        }
        #endregion

        #region Nguyễn Xuân Khoa's code

        #region QLNghiPhep
        private void btnThemNghiPhep_Click(object sender, EventArgs e)
        {
            frmNghiPhep frm = new frmNghiPhep(LoaiHanhDong.Them, new CapNhatNghiPhep(CapNhatDSNghiPhep));
            frm.ShowDialog();
        }

        private void btnCapNhatNghiPhep_Click(object sender, EventArgs e)
        {
            if (dgvNghiPhep.SelectedRows.Count > 0)
            {
                frmNghiPhep frm = new frmNghiPhep(LoaiHanhDong.CapNhat, new CapNhatNghiPhep(CapNhatDSNghiPhep));
                frm.NghiPhepCapNhat = new NghiPhepManager().LayNghiPhep(Convert.ToInt32(dgvNghiPhep.SelectedRows[0].Cells["MaNghiPhep"].Value));
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn một thông tin nghỉ phép!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnHuyNghiPhep_Click(object sender, EventArgs e)
        {
            if (dgvNghiPhep.SelectedRows.Count > 0)
            {
                int id = int.Parse(dgvNghiPhep.SelectedRows[0].Cells["MaNghiPhep"].Value.ToString());
                DialogResult dlg = MessageBox.Show("Bạn có muốn xóa nghỉ phép có mã " + id + " hay không ?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dlg == DialogResult.Yes)
                {
                    NghiPhepManager nm = new NghiPhepManager();
                    var re = nm.XoaNghiPhep(id);
                    if (re.Success)
                    {
                        var list = (dgvNghiPhep.DataSource as BindingListView<NghiPhep>).DataSource as List<NghiPhep>;
                        list.RemoveAt(dgvNghiPhep.SelectedRows[0].Index);
                        dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(list);
                        lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
                        MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else MessageBox.Show(re.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show("Bạn chưa chọn nghỉ phép muốn xóa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnXemCTNghiPhep_Click(object sender, EventArgs e)
        {
            if (dgvNghiPhep.SelectedRows.Count > 0)
            {
                int id = int.Parse(dgvNghiPhep.SelectedRows[0].Cells["MaNghiPhep"].Value.ToString());
                frmChiTietNghiPhep frm = new frmChiTietNghiPhep(new NghiPhepManager().LayNghiPhep(id));
                frm.ShowDialog();
            }
            else MessageBox.Show("Bạn chưa chọn nghỉ phép muốn xem!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnTimNghiPhep_Click(object sender, EventArgs e)
        {
            btnTimNghiPhep.Expanded = true;
        }

        private void btnTimNghiPhepTheoNgay_Click(object sender, EventArgs e)
        {
            frmTimKiemNghiPhep frm = new frmTimKiemNghiPhep(TimKiemNghiPhep.TheoNgay, new HienThiDanhSachNghiPhep(HienThiNghiPhep));
            frm.ShowDialog();
        }

        private void btnTimNghiPhepTheoNhanVien_Click(object sender, EventArgs e)
        {
            frmTimKiemNghiPhep frm = new frmTimKiemNghiPhep(TimKiemNghiPhep.TheoNhanVien, new HienThiDanhSachNghiPhep(HienThiNghiPhep));
            frm.ShowDialog();
        }

        private void btnTaiDSNghiPhep_Click(object sender, EventArgs e)
        {
            dialogTaiDanhDSNghiPhep dia = new dialogTaiDanhDSNghiPhep(new HienThiDanhSachNghiPhep(HienThiNghiPhep));
            dia.ShowDialog();
        }

        private void TaoDGVNghiPhep()
        {
            // Cài đặt các thuộc tính cần thiết
            dgvNghiPhep.AllowUserToAddRows = false;
            dgvNghiPhep.AllowUserToDeleteRows = false;
            dgvNghiPhep.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvNghiPhep.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvNghiPhep.Dock = DockStyle.Fill;
            dgvNghiPhep.MultiSelect = false;
            dgvNghiPhep.ReadOnly = true;
            dgvNghiPhep.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvNghiPhep.AutoGenerateColumns = false;
            dgvNghiPhep.DoubleClick += btnXemCTNghiPhep_Click;
            dgvNghiPhep.ContextMenuStrip = cmsQLNghiPhep;

            // Tạo các cột cần thiết
            DataGridViewTextBoxColumn MaNghiPhep = new DataGridViewTextBoxColumn();
            MaNghiPhep.HeaderText = "Mã nghỉ phép";
            MaNghiPhep.DataPropertyName = "MaNghiPhep";
            MaNghiPhep.Name = "MaNghiPhep";
            MaNghiPhep.Visible = false;

            DataGridViewTextBoxColumn MaNhanVien = new DataGridViewTextBoxColumn();
            MaNhanVien.HeaderText = "Mã nhân viên";
            MaNhanVien.DataPropertyName = "MaNhanVien";
            MaNhanVien.Name = "MaNhanVien";
            MaNhanVien.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn HoTen = new DataGridViewTextBoxColumn();
            HoTen.HeaderText = "Họ và tên";
            HoTen.DataPropertyName = "HoTen";
            HoTen.Name = "HoTen";
            HoTen.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn NgayNghi = new DataGridViewTextBoxColumn();
            NgayNghi.HeaderText = "Ngày nghỉ";
            NgayNghi.DataPropertyName = "NgayNghi";
            NgayNghi.Name = "NgayNghi";
            NgayNghi.DefaultCellStyle.Format = "dd/MM/yyyy";
            NgayNghi.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn NgayDiLam = new DataGridViewTextBoxColumn();
            NgayDiLam.HeaderText = "Ngày đi làm";
            NgayDiLam.DataPropertyName = "NgayDiLam";
            NgayDiLam.Name = "NgayDiLam";
            NgayDiLam.DefaultCellStyle.Format = "dd/MM/yyyy";
            NgayDiLam.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn LyDo = new DataGridViewTextBoxColumn();
            LyDo.HeaderText = "Lý do";
            LyDo.DataPropertyName = "LyDo";
            LyDo.Name = "LyDo";
            LyDo.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            if (dgvNghiPhep.Columns.Count == 0)
                dgvNghiPhep.Columns.AddRange(new DataGridViewColumn[] { MaNghiPhep, MaNhanVien, HoTen, NgayNghi, NgayDiLam, LyDo });

            // Lấy DS PhieuMuon
            ActionResultAsList<NghiPhep> rs = new NghiPhepManager().LayDanhSachNghiPhep();
            if (rs.Success)
                dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(rs.ObjectList);
            else
                MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void btnImportNghiPhep_Click(object sender, EventArgs e)
        {
            frmDocFileExcel frm = new frmDocFileExcel();
            frm.ShowDialog();
            if (frm.Result != null)
            {
                ActionResultAsList<NghiPhep> rs = new NghiPhepManager().ThemNghiPhep(frm.Result);
                if (rs.Success)
                {
                    MessageBox.Show("Đã thêm thành công " + rs.ObjectList.Count + " thông tin.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    HienThiNghiPhep(new NghiPhepManager().LayDanhSachNghiPhep().ObjectList);
                }
                else
                {
                    string s = "Đã thêm thành công " + rs.ObjectList.Count + " thông tin.";
                    s += "\nĐã xảy ra " + rs.Exceptions.Count + " lỗi.\n";
                    s += "Bạn có muốn xem thông tin lỗi không?";
                    if (MessageBox.Show(s, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        frmHienThiLoi frmm = new frmHienThiLoi(rs.Exceptions);
                        frmm.ShowDialog();
                    }
                }
            }
        }

        public void HienThiNghiPhep(List<NghiPhep> ds)
        {
            dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(ds);
            lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
        }

        public void CapNhatDSNghiPhep(LoaiHanhDong hd, NghiPhep np)
        {
            List<NghiPhep> list = (dgvNghiPhep.DataSource as BindingListView<NghiPhep>).DataSource as List<NghiPhep>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(np);
                    dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
                    break;
                case LoaiHanhDong.Xoa:
                    dgvNghiPhep.Rows.Remove(dgvNghiPhep.SelectedRows[0]);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index = list.FindIndex(s => s.MaNghiPhep == np.MaNghiPhep);
                    list[index] = np;
                    dgvNghiPhep.DataSource = new BindingListView<NghiPhep>(list);
                    break;
                default:
                    break;
            }
        }
        #endregion

        #region QLTangCa
        private void btnThemTangCa_Click(object sender, EventArgs e)
        {
            frmTangCa frm = new frmTangCa(LoaiHanhDong.Them, new CapNhatTangCa(CapNhatDSTangCa), null);
            frm.ShowDialog();
        }
        private void btnCapNhatTangCa_Click(object sender, EventArgs e)
        {
            if (dgvTangCa.SelectedRows.Count > 0)
            {
                ActionResultAsList<TangCa> rs = new TangCaManager().LayTangCa(Convert.ToString(dgvTangCa.SelectedRows[0].Cells["MaTangCa"].Value));
                if (rs.Success)
                {
                    frmTangCa frm = new frmTangCa(LoaiHanhDong.CapNhat, new CapNhatTangCa(CapNhatDSTangCa), rs.ObjectList[0]);
                    frm.ShowDialog();
                }
            }
            else
                MessageBox.Show("Bạn chưa chọn tăng ca muốn cập nhật!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        }

        private void btnHuyTangCa_Click(object sender, EventArgs e)
        {
            if (dgvTangCa.SelectedRows.Count > 0)
            {
                TangCaManager nm = new TangCaManager();
                string id = Convert.ToString(dgvTangCa.SelectedRows[0].Cells["MaTangCa"].Value.ToString());
                var re = nm.LayTangCa(id);
                DialogResult dlg = MessageBox.Show("Bạn có muốn xóa tăng ca có mã " + id + " hay không ?\n\nChi tiết:\n - Số lượng đăng ký tăng ca: " + re.ObjectList[0].DKTangCas.Count + ".", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dlg == DialogResult.Yes)
                {
                    var re1 = nm.XoaTangCa(id);
                    if (re.Success)
                    {
                        var list = (dgvTangCa.DataSource as BindingListView<TangCa>).DataSource as List<TangCa>;
                        list.RemoveAt(dgvTangCa.SelectedRows[0].Index);
                        dgvTangCa.DataSource = new BindingListView<TangCa>(list);
                        lblTongSoDong.Text = "Tổng số dòng: " + dgvTangCa.RowCount;
                        MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else MessageBox.Show(re.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show("Bạn chưa chọn nghỉ phép muốn xóa!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnXemCTTangCa_Click(object sender, EventArgs e)
        {

            if (dgvTangCa.SelectedRows.Count > 0)
            {
                ActionResultAsList<TangCa> rs = new TangCaManager().LayTangCa(Convert.ToString(dgvTangCa.SelectedRows[0].Cells["MaTangCa"].Value));
                if (rs.Success)
                {
                    frmChiTietTangCa frm = new frmChiTietTangCa(rs.ObjectList[0]);
                    frm.ShowDialog();
                }
            }
            else
                MessageBox.Show("Bạn chưa chọn tăng ca muốn cập nhật!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnTimTangCa_Click(object sender, EventArgs e)
        {
            frmTimKiemTangCa frm = new frmTimKiemTangCa(new HienThiDanhSachTangCa(HienThiTangCa));
            frm.ShowDialog();
        }

        private void btnTaiDSTangCa_Click(object sender, EventArgs e)
        {
            dialogTaiDanhDSTangCa frm = new dialogTaiDanhDSTangCa(new HienThiDanhSachTangCa(HienThiTangCa));
            frm.Show();
        }
        private void TaoDGVTangCa()
        {
            // Cài đặt các thuộc tính cần thiết
            dgvTangCa.AllowUserToAddRows = false;
            dgvTangCa.AllowUserToDeleteRows = false;
            dgvTangCa.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvTangCa.BackgroundColor = Color.FromArgb(76, 133, 188);
            dgvTangCa.Dock = DockStyle.Fill;
            dgvTangCa.MultiSelect = false;
            dgvTangCa.ReadOnly = true;
            dgvTangCa.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvTangCa.AutoGenerateColumns = false;
            dgvTangCa.DoubleClick += btnXemCTTangCa_Click;
            dgvTangCa.ContextMenuStrip = cmsQLTangCa;
            // Tạo các cột cần thiết
            DataGridViewTextBoxColumn MaTangCa = new DataGridViewTextBoxColumn();
            MaTangCa.HeaderText = "Mã tăng ca";
            MaTangCa.DataPropertyName = "MaTangCa";
            MaTangCa.Name = "MaTangCa";
            MaTangCa.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn NgayBD = new DataGridViewTextBoxColumn();
            NgayBD.HeaderText = "Ngày bắt đầu";
            NgayBD.DataPropertyName = "NgayBD";
            NgayBD.Name = "NgayBD";
            NgayBD.DefaultCellStyle.Format = "dd/MM/yyyy";
            NgayBD.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn NgayKT = new DataGridViewTextBoxColumn();
            NgayKT.HeaderText = "Ngày kết thúc";
            NgayKT.DataPropertyName = "NgayKT";
            NgayKT.Name = "NgayKT";
            NgayKT.DefaultCellStyle.Format = "dd/MM/yyyy";
            NgayKT.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn GioBD = new DataGridViewTextBoxColumn();
            GioBD.HeaderText = "Giờ bắt đầu";
            GioBD.DataPropertyName = "GioBD";
            GioBD.Name = "GioBD";
            GioBD.DefaultCellStyle.Format = "HH:mm:ss";
            GioBD.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            DataGridViewTextBoxColumn GioKT = new DataGridViewTextBoxColumn();
            GioKT.HeaderText = "Giờ kết thúc";
            GioKT.DataPropertyName = "GioKT";
            GioKT.Name = "GioKT";
            GioKT.DefaultCellStyle.Format = "HH:mm:ss";
            GioKT.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            if (dgvTangCa.Columns.Count == 0)
                dgvTangCa.Columns.AddRange(new DataGridViewColumn[] { MaTangCa, NgayBD, NgayKT, GioBD, GioKT });

            // Lấy DS PhieuMuon
            ActionResultAsList<TangCa> rs = new TangCaManager().LayDanhSachTangCa();
            if (rs.Success)
                dgvTangCa.DataSource = new BindingListView<TangCa>(rs.ObjectList);
            else
                MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void HienThiTangCa(List<TangCa> ds)
        {
            dgvTangCa.DataSource = new BindingListView<TangCa>(ds);
            lblTongSoDong.Text = "Tổng số dòng: " + dgvNghiPhep.RowCount;
        }

        public void CapNhatDSTangCa(LoaiHanhDong hd, TangCa tc)
        {
            List<TangCa> list = (dgvTangCa.DataSource as BindingListView<TangCa>).DataSource as List<TangCa>;
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    list.Add(tc);
                    dgvTangCa.DataSource = new BindingListView<TangCa>(list);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvTangCa.RowCount;
                    break;
                case LoaiHanhDong.Xoa:
                    dgvTangCa.Rows.Remove(dgvTangCa.SelectedRows[0]);
                    lblTongSoDong.Text = "Tổng số dòng: " + dgvTangCa.RowCount;
                    break;
                case LoaiHanhDong.CapNhat:
                    int index = list.FindIndex(s => s.MaTangCa == tc.MaTangCa);
                    list[index] = tc;
                    dgvTangCa.DataSource = new BindingListView<TangCa>(list);
                    break;
                default:
                    break;
            }
        }
        #endregion

        private void TabQLOnSite_Click(object sender, EventArgs e)
        {

        }

        #endregion

        private void btnImportTangCa_Click(object sender, EventArgs e)
        {
            btnImportTangCa.Expanded = true;
        }

        private void biImportTangCa_Click(object sender, EventArgs e)
        {
            frmDocFileExcel frm = new frmDocFileExcel();
            frm.ShowDialog();
            if (frm.Result != null)
            {
                ActionResultAsList<TangCa> rs = new TangCaManager().ThemTangCa(frm.Result);
                if (rs.Success)
                {
                    MessageBox.Show("Đã thêm thành công " + rs.ObjectList.Count + " thông tin.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    HienThiTangCa(new TangCaManager().LayDanhSachTangCa().ObjectList);
                }
                else
                {
                    string s = "Đã thêm thành công " + rs.ObjectList.Count + " thông tin.";
                    s += "\nĐã xảy ra " + rs.Exceptions.Count + " lỗi.\n";
                    s += "Bạn có muốn xem thông tin lỗi không?";
                    if (MessageBox.Show(s, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        frmHienThiLoi frmm = new frmHienThiLoi(rs.Exceptions);
                        frmm.ShowDialog();
                    }
                }
            }
        }

        private void biImportDKTangCa_Click(object sender, EventArgs e)
        {
            frmDocFileExcel frm = new frmDocFileExcel();
            frm.ShowDialog();
            if (frm.Result != null)
            {
                ActionResultAsList<DKTangCa> rs = new DKTangCaManager().ThemDanhSachDKTangCa(frm.Result);
                if (rs.Success)
                {
                    MessageBox.Show("Đã thêm thành công " + rs.ObjectList.Count + " thông tin.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    string s = "Đã thêm thành công " + rs.ObjectList.Count + " thông tin.";
                    s += "\nĐã xảy ra " + rs.Exceptions.Count + " lỗi.\n";
                    s += "Bạn có muốn xem thông tin lỗi không?";
                    if (MessageBox.Show(s, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        frmHienThiLoi frmm = new frmHienThiLoi(rs.Exceptions);
                        frmm.ShowDialog();
                    }
                }
            }
        }

        
    }
}